

const path = require('path');

// const fsp = require('fs/promises');
const fs = require('fs');
const fsp = fs.promises;

// var siteUrl = path.join(__dirname, "../../site"); // 默认站点路径 (前端相关的文件 放到site目录中)
var siteUrl = path.join(__dirname, "../../public"); // 默认站点路径 (前端相关的文件 放到site目录中)

function render(pathname, res) {

    // 判断 pathname 在站点中是否存在   => 
    var readPath = path.join(siteUrl, pathname);
    var ext = path.extname(readPath);
    console.log(11111, pathname, readPath, ext, fs.existsSync(readPath));

    if (ext === ".html") {   //如果指向使用页面路由  => 站点中的.html文件不渲染
        return false;
    }


    if (fs.existsSync(readPath)) {  // 可以判断是否存在文件或文件夹
        // 如果访问的站点下的文件  -> 直接返回给前端
        // 如果访问的站点下的文件夹  -> 默认访问文件夹下的主页面
        fsp.stat(readPath).then(info => {
            if (info.isFile()) {  // 如果是文件
                console.log("文件");
                // 如果在站点中存在 -> 取得该文件 -> 传递给前端
                var defaultEncoding = "utf-8";


                var types = {
                    ".ejs": "text/html;charset=utf-8",
                    ".html": "text/html;charset=utf-8",
                    ".css": "text/css;charset=utf-8",
                    ".js": "text/javascript;charset=utf-8",
                    ".json": "text/json;charset=utf-8",
                    ".jpg": "image/jpg",
                    ".jpeg": "image/jpeg",
                    ".png": "image/png",
                    ".gif": "image/gif",
                }
                // ext in types
                if (types[ext]) {
                    res.writeHead(200, {
                        "Content-Type": types[ext],
                    })
                }

                var imgExts = [".jpg", ".jpeg", ".png", ".gif", ".webp"];
                if (imgExts.includes(ext)) { //如果是图片格式
                    defaultEncoding = "binary";
                }

                // HTML css JS(!!)
                fsp.readFile(readPath, defaultEncoding).then(txt => {
                    res.end(txt, defaultEncoding);
                }).catch(err => {
                    console.log("出现错误", err);
                    res.end(err.message);
                })
            } else if (info.isDirectory()) {
                console.log("目录");
                //  /   => 文件夹   / + ./index.html
                //  /html   => 文件夹   /html + ./index.html
                // console.log("读取目录", path.join(pathname, "./index.html"));
                render(path.join(pathname, "./index.ejs"), res);
            }
        })
    }
    return fs.existsSync(readPath);  // true  false
}


module.exports = {
    render,
}